#include "Ejercicio3.h"

Ejercicio3::Ejercicio3()
{
}

Ejercicio3::~Ejercicio3()
{
}

void Ejercicio3::execute( const string& in, const string& out ) const
{
	ifstream fin( in.c_str(), ios::in );
	ofstream fout( out.c_str(), ios::out );
	
	if( fin.good() && fout.good() )
	{
		Patricia p = Patricia();
		
		stringstream ss;
		string linea, funcion, parametro, salida = "";
		int lineas = 0;
		unsigned int j;
		
		if( getline( fin, linea ) )
			lineas = atoi( linea.c_str() );
		
		for( int i = 0; i < lineas && getline( fin, linea ); i++ )
		{
			j = 0;
			
			 while( j < linea.length() && linea[j] != ' ' )
			 	j++;
			
			if( linea != "0" )
			{
				funcion = linea.substr( 0, j );
				 
				if( j < linea.length() )
					parametro = linea.substr( j+1, linea.length() );
				else
					parametro = "";
				
				//TODO: pq no anda switch?
				if( funcion == "agregar" )
					p.agregar(parametro);
				else if( funcion == "pertenece" )
				{
					salida+= salida == "" ? "" : " ";
					salida+= p.pertenece(parametro) ? "1" : "0";
				}
				else if( funcion == "sacar" )
					p.sacar(parametro);
				else if( funcion == "cardinal" )
				{
					salida+= salida == "" ? "" : " ";
					ss.str("");
					ss << p.cardinal();
					salida+= ss.str();
				}
			}
		}
		
		fout.write( salida.c_str(), salida.length() );
	}
	
	if( fin.good() )
		fin.close();
	if( fout.good() )
		fout.close();
}
